package main

import "fmt"

func calmDown() {
	// 阻止程序陷入panic
	// 当出现panic时,recover返回传递给panic的任何值;没有panic时返回nil
	//fmt.Println(recover())

	p := recover()
	err, ok := p.(error)
	if ok {
		fmt.Println(err.Error())
	}
}

func freakOut() {
	/*panic("oh no")
	// 不会运行
	recover()*/
	defer calmDown()
	panic("oh no")
	// panic之后的代码不会运行
	fmt.Println("I won't be run")
}

func main() {
	//freakOut()
	//fmt.Println("Exiting normally")

	defer calmDown()
	err := fmt.Errorf("there's an error")
	panic(err)
}
